home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / X-Ray / X-Ray INIT Source / menuPatches.c < prev    next >
Encoding:
Text File  |  1999-06-06  |  1000 b   |  46 lines  |  [TEXT/CWIE]

  1. // Copyright (C) 1999 Eric Roccasecca.  All rights reserved.
  2.  
  3. #include "X_Ray_Priv.h"
  4.  
  5. UniversalProcPtr    gOldMenuSelect, gMenuSelectUPP;
  6.  
  7. extern short    X_RayDrawLevel;
  8.  
  9. enum {
  10.     kMenuSelectProcInfo = kPascalStackBased
  11.                 | RESULT_SIZE(SIZE_CODE(sizeof(long)))
  12.                 | REGISTER_RESULT_LOCATION(kRegisterD0)
  13.                 | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Point)))
  14. };
  15.  
  16. pascal long X_Ray_MenuSelect (Point startPt);
  17.  
  18.  
  19. Boolean ApplyMenuPatches (void)
  20. {
  21.     // Apply patch to MenuSelect
  22.     gOldMenuSelect = NGetTrapAddress (_MenuSelect, ToolTrap);
  23.     gMenuSelectUPP = NewRoutineDescriptor ((ProcPtr)X_Ray_MenuSelect, kMenuSelectProcInfo, kPowerPCISA);
  24.     if (gMenuSelectUPP)
  25.         NSetTrapAddress (gMenuSelectUPP, _MenuSelect, ToolTrap);
  26.     else
  27.         return false;
  28.     
  29.     return true;
  30. }
  31.  
  32.  
  33. // suppresses X_Ray during menu drawing
  34. pascal long X_Ray_MenuSelect (Point startPt)
  35. {
  36.     long    result;
  37.     
  38.     X_RayDrawLevel++;
  39.     
  40.     result = CallUniversalProc (gOldMenuSelect, kMenuSelectProcInfo, startPt);
  41.     
  42.     X_RayDrawLevel--;
  43.     
  44.     return result;
  45. }
  46.